/*
 * @Author: vera_min vera_min@163.com
 * @Date: 2025-07-23 00:01:21
 * @LastEditors: vera_min vera_min@163.com
 * @LastEditTime: 2025-07-25 21:46:03
 * @FilePath: /mail_project_destop/src/utils/colorGenerator.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/**
 * 根据字符串生成一致的哈希值
 * @param str 输入字符串
 * @returns 哈希值
 */
function stringToHash(str: string): number {
  let hash = 0;
  if (str.length === 0) return hash;
  
  for (let i = 0; i < str.length; i++) {
    const char = str.charCodeAt(i);
    hash = ((hash << 5) - hash) + char;
    hash = hash & hash; // Convert to 32bit integer
  }
  
  return Math.abs(hash);
}

/**
 * 预定义的颜色列表 - 柔和且易于辨识的颜色
 */
const COLORS = [
  '#5D8AA8', // 空军蓝
  '#E32636', // 鲜红
  '#FFBF00', // 琥珀色
  '#9966CC', // 紫水晶
  '#7CAD71', // 柔和绿
  '#064057', // 深蓝色
  '#4B5320', // 军绿色
  '#FF7F50', // 珊瑚红
  '#6495ED', // 矢车菊蓝
  '#DC143C', // 深红色
  '#096544', // 深青色
  '#00008B', // 深蓝色
  '#008B8B', // 深青色
  '#B8860B', // 暗金色
  '#006400', // 深绿色
  '#BDB76B', // 暗卡其色
  '#8B008B', // 深洋红色
  '#556B2F', // 深橄榄绿
  '#FF8C00', // 深橙色
  '#9932CC', // 深兰花色
  '#8B0000', // 深红色
  '#E9967A', // 暗肉色
  '#483D8B', // 深板岩蓝
  '#2F4F4F', // 深石板灰
  '#00CED1'  // 深松石色
];

/**
 * 使用算法生成HSL颜色（色调、饱和度、亮度）
 * @param name 输入字符串
 * @returns HSL颜色值
 */
function generateHSLColor(name: string): string {
    console.log('generateHSLColor:', name);
  const hash = stringToHash(name);
  
  // 根据哈希值生成色调 (0-360)
  const hue = hash % 360;
  
  // 使用固定的饱和度和亮度以保证颜色适合显示文字
  const saturation = 65; // 65%
  const lightness = 55;  // 55%
  console.log('generateHSLColor22222:', `hsl(${hue}, ${saturation}%, ${lightness}%)`);
  
  return `hsl(${hue}, ${saturation}%, ${lightness}%)`;
}

/**
 * 从预定义颜色列表中选择颜色
 * @param name 输入字符串
 * @returns 十六进制颜色值
 */
function selectFromPredefinedColors(name: string): string {
  const hash = stringToHash(name);
  const index = hash % COLORS.length;
  return COLORS[index];
}

/**
 * 根据邮箱名称生成背景色
 * @param emailName 邮箱名称
 * @param usePreDefinedColors 是否使用预定义颜色列表
 * @returns CSS颜色值
 */
export function generateEmailColor(emailName: string, usePreDefinedColors = true): string {
  if (!emailName) return '#CCCCCC'; // 默认灰色
  
  // 可以使用完整邮箱名或者仅第一个单词
  const nameToUse = emailName.split(' ')[0];
  
  // 选择使用预定义颜色列表或者算法生成颜色
  return usePreDefinedColors 
    ? selectFromPredefinedColors(nameToUse)
    : generateHSLColor(nameToUse);
}
